"""
python中有print可以进行打印输出，那为什么我们还要学习logging

因为print语句，一旦创建后，执行到它时，就必须要运行。

但通常我们写程序的时候，是伴随着很多 调试 输出的，这个时候就需要有一个工具库来帮我们进行自动过滤调试日志。

并且，logging还有很好的 格式设置，以及很好的 输出日志文件、备份 的功能。
"""

# logging
# debug
# info
# warning
# error
# 默认只会输出 warning 以上日志
# 我们可以通过 logging.basicConfig(level=logging.DEBUG) 来改写

# import logging
# logging.basicConfig(level=logging.INFO)
# logging.debug("123213")
# logging.info("123123")
# logging.warning("zcxzc")
# logging.error("zczxczczxc")

# 调整日志输出端
"""
前面介绍中，日志是直接打印在终端的，但真正的使用过程中往往要输出为日志文件，只需要配置basicConfig即可。

日志写入默认是追加写入，不会覆盖文件原有内容。

通过这种方式，控制台就不会输出日志了，日志都会默认存到文件中。

我们后面可以通过其他的方式来进行日志文件输出，并且可以打印到控制台中。

这里只是介绍一下，日志是可以直接输出到文件里面的。
"""
# import logging
# 使用basicConfig调整日志输出至文件，filename='demo01.log'
# logging.basicConfig(filename='demo01.log', level=logging.DEBUG)
# 清空后再写入filemode="w"  一般不会这么用，都是采用默认的追加模式
# logging.basicConfig(filename='demo01.log', filemode="w", level=logging.DEBUG)

# 调整日志格式
"""
我们可以发现，日志的输出十分单调。

而我们常常看到的日志一般会包含时间、日志类别、日志名称等其他信息。

这类信息是可以通过 调整 格式来进行改写的。
asctime: 日志输出时间
levelname: 日志级别
filename: 输出日志的脚本文件
lineno: 输出日志的脚本文件的行数
message: 日志主体内容
"""
# import logging
# # 输出日志打印时间，日志级别等
# logging.basicConfig(format="%(asctime)s - %(levelname)s - %(filename)s - %(lineno)s : %(message)s", level=logging.DEBUG)
# logging.debug("This is debug log")

# 高级用法
"""
我们上面知道了，日志可以输出到文件中，也可以根据需要调整日志输出的格式。

但还有个问题，我们输出到文件中之后，就无法再输出到控制台中，这肯定不是我们想要的。
"""

## logger
"""
我们上面使用的时候，大多都是直接使用 logging

但是这样的话, 有个问题, 就是这个是通用的logging.

更多的时候, 我们需要使用 不同 的logging, 所以我们可以使用 logger, 来实例化不同的 logging
"""
# import logging
#
# logging.basicConfig(format="%(asctime)s|%(levelname)s|%(filename)s|%(lineno)s|%(message)s", level=logging.DEBUG)
#
# logger = logging.getLogger("abc")  # 使用时, 必须要传入一个参数来指定logger的名字, 并且每个logger的名字都应该不同
#
# logger.debug("test")

## handler
## 可以将日志分发到不同的地方
# 可以是文件、标准输出、邮件、或者通过socket、http等协议发送到任何地方

# import logging
# # 输出到控制台的handler
# # 我们设置了StreamHandler之后，就不需要logging.basicConfig来设置日志级别了
# sh = logging.StreamHandler()
#
#
# # 输出到文件的handler
# fh = logging.FileHandler('filename')

## Formatter
# import logging
# formatter = logging.Formatter("%(asctime)s|%(levelname)s|%(filename)s|%(lineno)s|%(message)s")


# logger/handlers/formatter联用
# import logging
#
# logger = logging.getLogger("test")
#
# logger.setLevel(logging.DEBUG)
#
# sh = logging.StreamHandler()  # 定义输出到控制台的handler
# fh = logging.FileHandler(filename="./log.log", encoding="utf-8")  # 定义输出到文件的handler
# formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s - %(lineno)s - %(message)s")  # 定义输出格式
#
# # 分别给两个handler设置格式
# sh.setFormatter(formatter)
# fh.setFormatter(formatter)
#
# # 最后将这两个handler设置到logger身上
# logger.addHandler(sh)
# logger.addHandler(fh)
#
# logger.debug("测试输出")


from .Logger import Logger

logger = Logger("abc", "muzhou")

logger.debug("123")